package com.dock.classin.utils;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class EncryptUtils {
    /**
     * SHA256，安全散列算法（Secure Hash Algorithm 256-bit），一种被广泛使用的密码散列函数，可以产生出一个固定长度的散列值。用于确保信息传输完整一致。
     * <p>
     * 输入：待加密的字符串
     * 输出：256位（16字节）或64个16进制字符（常用）
     * 应用：密码管理、数字签名、文件完整性校验
     * 安全性：★★☆☆☆
     *
     * @param plainString 明文
     * @return cipherString 密文
     */
    public static String sha256(String plainString) {
        String cipherString = null;
        try {
            // 获取实例（SHA-512同理）
            MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
            // 计算摘要
            byte[] cipherBytes = messageDigest.digest(plainString.getBytes(StandardCharsets.UTF_8));
            // 输出为16进制字符串
            StringBuilder sb = new StringBuilder();
            for (byte b : cipherBytes) {
                sb.append(String.format("%02x", b));
            }
            cipherString = sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cipherString;
    }

    public static String sha256_2(String input) throws NoSuchAlgorithmException {

            // 创建一个SHA-256 MessageDigest实例
            MessageDigest digest = MessageDigest.getInstance("SHA-256");

            // 计算哈希值
            byte[] hashBytes = digest.digest(input.getBytes(StandardCharsets.UTF_8));

            // 将哈希值转换为十六进制字符串
            StringBuilder hexString = new StringBuilder(2 * hashBytes.length);
            for (byte b : hashBytes) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }

            // 输出哈希值
            System.out.println("SHA-256哈希值（十六进制）: " + hexString.toString());

        return hexString.toString();
    }
}
